home *** CD-ROM | disk | FTP | other *** search
/ Softwarová Záchrana 3 / Softwarova-zachrana-3.bin / Xteq X-Setup / xqdcXSP-Setup-EN.exe / {app} / plugins / XQ New File Menu.xpl < prev    next >
Text File  |  2001-01-31  |  8KB  |  327 lines

  1. "FILE"="Xteq Systems X-Setup Plugin 5.0"
  2. "TYPE"="9"
  3. "COUNT"="1"
  4. "UIPATH"="Appearance\Files&Folders\"New" Context Menu"
  5. "NAME"="Show/Hide Items"
  6. "VERSION"="1.10"
  7. "LANGUAGE"="VBScript"
  8. "TEXT 1"="---"
  9. "DESCRIPTION 1"="This plug-in allows you to specify which items should appear in the NEW list in the Context Menu (right-click)."
  10. "DESCRIPTION 2"="Items that have a checkmark will appear in the NEW list, items with no checkmark will not appear."
  11. "AUTHOR"="Xteq Systems"
  12. "CONTACTURL"="http://www.xteq.com"
  13. "COPYRIGHT"="Copyright ⌐ Xteq Systems - All Rights Reserved"
  14. "COMMENT 1"="Bloody complicated plug-in!!!"
  15.  
  16.  
  17. sP="HKLM\Software\Classes\"
  18. sV_ShellNew="\ShellNew"
  19. sV_ShellNewDeac="\ShellNew-"
  20.  
  21. dim iItems        'contains the total amount of the registry keys
  22. Dim aryItems()    'contains the name of the Registry paths (direct files starting with ".")
  23. Dim aryItemsLoc() 'contains the registry location  (\ShellNew or \ShellNew-)
  24. Dim aryDesc()     'contains the description of the items
  25.  
  26.  
  27. Sub Plugin_Initialize 
  28.  if RegPathExists(sP) then
  29.     Call ReadRegistry
  30.  else
  31.     Call Disable
  32.  end if
  33. End Sub
  34.  
  35.  
  36. Sub ReadRegistry
  37.     iItems=RegEnumPaths(sP) 
  38.  
  39.     dim aryTemp
  40.     ReDim aryTemp(iItems)
  41.     dim aryTemp2
  42.     ReDim aryTemp2(iItems)
  43.  
  44.     l=1
  45.     e=1
  46.  
  47.     sDebug=""
  48.     'read all data from the path
  49.     For l=1 to iItems       
  50.         sItem=RegEnumElement(l)    
  51.  
  52.         if left(sItem,1)="." then
  53.            s=IsShellNew(sP & sItem)
  54.  
  55.            If len(s)>0 then
  56.               sDebug=sDebug & sItem
  57.               aryTemp(e)=sItem
  58.               aryTemp2(e)=s
  59.               e=e+1
  60.            end if                
  61.         end if
  62.     next
  63.     'Call DebugMsg(sDebug)
  64.  
  65.  
  66.     sDebug=""
  67.     'now we have an array with the locations of the "ShellNew" or
  68.     '"ShellNew-" paths. However, to appear in the list, it must have
  69.     'have at least one entry in the list. If not, the "ShellNew(-)" entry
  70.     'is useless and will be set to "" to be sorted out later
  71.     for l=1 to e-1
  72.         s=aryTemp2(l)
  73.         iCount=RegEnumValues(s)
  74.         if iCount=0 then
  75.            sDebug=sDebug & aryTemp(l) & " - " & aryTemp2(l) &  chr(13) & chr(10)
  76.            aryTemp(l)=""
  77.            aryTemp2(l)=""
  78.         end if
  79.     next
  80.     'Call DebugMsg(sDebug)
  81.  
  82.  
  83.  
  84.     'okay, now count how many items we have left (that are not empty)...
  85.     iItems=0
  86.     for l=1 to e-1
  87.         If Len(aryTemp(l))>0 then
  88.            iItems=iItems+1
  89.         end if 
  90.     next 
  91.  
  92.     'redim final arrays with this value
  93.     ReDim aryItems(iItems)
  94.     ReDim aryItemsLoc(iItems)
  95.     ReDim aryDesc(iItems)
  96.  
  97.    
  98.     'copy from temp array to the final ones
  99.     i=1
  100.     for l=1 to e-1
  101.         If Len(aryTemp(l))>0 then
  102.            aryItems(i)=aryTemp(l)
  103.            aryItemsLoc(i)=aryTemp2(l)
  104.            i=i+1
  105.         end if
  106.     next
  107.  
  108.     'fill third array with the file description
  109.     for l=1 to iItems
  110.         aryDesc(l)=GetFileDescription(aryItems(l))
  111.     next 
  112.  
  113.     'AND NOW update the UI
  114.     for l=1 to iItems
  115.         Call SetUIElement(l,aryDesc(l) & " (" & aryItems(l) & ")") 'set data in X-Setup
  116.         if Right(aryItemsLoc(l),1)<>"-" then 'not disabled
  117.            Call SetUIElementEx(l,true) 'set activated
  118.         else
  119.            Call SetUIElementEx(l,false) 'set not active
  120.         end if
  121.     Next
  122. End Sub
  123.  
  124.  
  125. 'VERSION 1.1
  126. 'returns the readable description for a file TYPE. Input is the
  127. 'raw file type (e.g. ".TXT"). 
  128. Function GetFileDescription(DotType)
  129.   sxd_BasePath="HKLM\Software\Classes\"
  130.  
  131.   sxd_Path=sxd_BasePath & DotType & "\@"
  132.   sxd_Val=RegReadValue(sxd_Path)
  133.  
  134.   if IsEmpty(sxd_Val)=true then
  135.      'extended description not found! return default
  136.      GetFileDescription="<UNKNOWN>"
  137.   else
  138.      'found, now get the "real" description
  139.      sxd_Path=sxd_BasePath & sxd_Val & "\@"
  140.      sxd_Name=RegReadValue(sxd_Path)
  141.      
  142.      if IsEmpty(sxd_Name)=true then
  143.         'argh! 
  144.         GetFileDescription="<UNKNOWN>"
  145.      else
  146.         GetFileDescription=sxd_Name
  147.      end if
  148.   end if
  149.  
  150. End Function
  151.  
  152.  
  153.  
  154. 'VERSION 1.2
  155. 'returns the reg path to the ShellNew(-) path or "" if nothing was found. Input is the
  156. 'path to the data type (e.g. "HKCR\.TXT"). 
  157. Function IsShellNew(Path)
  158.  Dim sCheck,sReturn
  159.  xd_sV_ShellNew="\ShellNew"
  160.  xd_sV_ShellNewDeac="\ShellNew-"
  161.  sReturn=""
  162.  
  163.  'maybe it's a little trick file
  164.  s=RegReadValue(Path & "\@")
  165.  if IsEmpty(s)=false then          
  166.     'HKCR\.XXX\XX File\ShellNew
  167.     sCheck=Path & "\" & s & xd_sV_ShellNew
  168.     if RegPathExists(sCheck) then
  169.        sReturn=sCheck
  170.     else
  171.        'maybe deactivated?
  172.        sCheck=Path & "\" & s & xd_sV_ShellNewDeac
  173.        if RegPathExists(sCheck) then
  174.           sReturn=sCheck
  175.        else
  176.           'okay, I give up! I have checked all possibilies...
  177.           sReturn=""
  178.        end if
  179.     end if
  180.  end if
  181.  
  182.  
  183.  if sReturn="" then
  184.     'Maybe this value has no name, so check on the .XXX file directly
  185.     'HKCR\.XXX\ShellNew
  186.     sCheck=Path & xd_sV_ShellNew
  187.     If RegPathExists(sCheck) then
  188.        sReturn=sCheck
  189.     else
  190.        'now check if it's deactivated...
  191.        'HKCR\.XXX\ShellNew
  192.        sCheck=Path & xd_sV_ShellNewDeac
  193.        If RegPathExists(sCheck) then 
  194.           sReturn=sCheck
  195.        else
  196.           'I give up..
  197.           sReturn=""
  198.        end if
  199.     end if
  200.  end if 
  201.  
  202.  
  203.  IsShellNew=sReturn
  204. End Function
  205.  
  206.  
  207.  
  208. Sub Plugin_Apply(ElementIndex,ElementSubIndex)
  209.     bChanges=false
  210.  
  211.     for l=1 to iItems
  212.         'for debugging....
  213.         s=s & GetUIElement(l) & "-" & GetUIElementEx(l) & "-" & aryItemsLoc(l) & chr(13) & chr(10)
  214.  
  215.         bUI=GetUIElementEx(l)       
  216.  
  217.         sCurPath=aryItemsLoc(l)              
  218.         if Right(sCurPath,1)="-" then
  219.            bReg=false
  220.         else
  221.            bReg=true
  222.         end if
  223.  
  224.         if bUI=true and bReg=true then
  225.            'do nothing, both activated
  226.         else
  227.            if bUI=false and bReg=false then
  228.               'do nothing, both deactivated
  229.            else
  230.  
  231.               if bUI=true and bReg=false then
  232.                  sNewPath=left(sCurPath,len(sCurPath)-1) 'from "ShellNew-" to "ShellNew"
  233.               else                
  234.                  sNewPath=sCurPath & "-"                 'from "ShellNew" to "ShellNew-"
  235.               end if  
  236.  
  237.               'execute move action
  238.               Call MoveFolder(sCurPath,sNewPath)
  239.  
  240.               'set flag
  241.               bChanges=true
  242.  
  243.            end if
  244.         end if
  245.     next 
  246.  
  247.  
  248.     if bChanges=true then
  249.        'clear UI
  250.        for i=1 to iItems
  251.            Call SetUIElement(i,"")
  252.        next
  253.  
  254.        're-read UI
  255.        Call ReadRegistry
  256.  
  257.        'call the holy Windows API
  258.        Call IndicateSettingChange()
  259.  
  260.        'just to be sure...        
  261.        Call Logoff
  262.     end if
  263.  
  264.  
  265. End Sub
  266.  
  267.  
  268.  
  269. Sub MoveFolder(CurrentFolder,NewFolder)
  270.  if right(CurrentFolder,1)<>"\" then
  271.     CurrentFolder=CurrentFolder & "\"
  272.  end if
  273.  
  274.  if right(NewFolder,1)<>"\" then
  275.     NewFolder=NewFolder & "\"
  276.  end if
  277.  
  278.  
  279.  'move values for base path
  280.  Call MoveValues(CurrentFolder,NewFolder)
  281.  
  282.  
  283.  'check for any existing subfolder
  284.  iC=RegEnumPaths(CurrentFolder)
  285.  if iC>0 then
  286.     Dim aryTemp()
  287.     ReDim aryTemp(iC)
  288.  
  289.     for i=1 to iC 
  290.         aryTemp(i)=RegEnumElement(i) & "\"
  291.     next
  292.  
  293.     for i=1 to iC
  294.         sP_Old=CurrentFolder & aryTemp(i)
  295.         sP_New=NewFolder & aryTemp(i)
  296.         Call MoveValues(sP_Old,sP_New)        
  297.         Call RegDeletePath(sP_Old)      
  298.     next 
  299.  end if
  300.  
  301.  
  302.  'remove old path
  303.  Call RegDeletePath(CurrentFolder) 
  304. End Sub
  305.  
  306.  
  307. Sub MoveValues(OldFolder,NewFolder)
  308.  iC=RegEnumValues(OldFolder)
  309.  for i=1 to iC
  310.      x_Name=RegEnumElement(i)
  311.      x_Type=RegValueType(OldFolder & x_Name)
  312.      x_Value=RegReadValue(OldFolder & x_Name)
  313.  
  314.      'move to new location
  315.      Call RegWriteValue(NewFolder & x_Name,x_Value,x_Type)
  316.  
  317.      'delete old value
  318.      Call RegDeleteValue(OldFolder & x_Name)
  319.  next 
  320.  
  321. End Sub
  322.  
  323.  
  324.  
  325. Sub Plugin_Terminate 
  326. End Sub
  327.